package com.platform.server.dao;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.platform.server.entity.DemandOrder;
import com.platform.server.entity.Order;
import com.platform.server.entity.ServerOrder;

public interface ServerDao {

    /**
     * 选择类型列表
     */
    List<Map<String, Object>> selectServerList(String servername);

    List<Map<String, Object>> selectUserArrearage();
    Integer deleteArrearage(String serverid);

    /**
     * 选择价格列表
     */
    Integer selectPriceList(Integer serverid);

    /**
     * 获取推荐需求列表
     */
    List<Map<String, Object>> selectRecommendDemand();

    /**
     * 获取推荐服务列表
     */
    List<Map<String, Object>> selectRecommendServer();

    /**
     * 获取服务列表
     */
    List<Map<String, Object>> selectServiceList(@Param("type") String type, @Param("option") String option, @Param("details") String details, @Param("address") String address);

    /**
     * 获取需求列表
     */
    List<Map<String, Object>> selectDemandList(@Param("type") String type, @Param("option") String option, @Param("details") String details, @Param("address") String address);

    /**
     * 发布服务
     */
    int publishServer(ServerOrder server);
    
    /**
     * 修改服务
     */
    int updatePublishServer(ServerOrder server);
    /**
     * 修改预约
     */
    int updateNowMake(Order order);
    /**
     * 发布需求
     */
    int publishDemand(DemandOrder server);
    /**
     * 修改服务
     */
    int updatePublishDemand(DemandOrder server);
    /**
     * 关注服务
     */
    int concernServer(String userid, String serverid);

    /**
     * 取消关注服务
     */
    int cancelConcernServer(String userid, String serverid);

    /**
     * 需求资料详情
     */
    Map<String, Object> selectDemandInfo(Integer id);

    /**
     * 确认预约
     */
    //查看服务资料详情
    Map<String, Object> selectServerInfo(Integer id);

    //查看用户积分
    String selectUserIntegral(String userid);

    //查看每积分可以抵现多少元
    Map<String, Object> selectIntegralWithdraw();

    /**
     * 预约
     */
    int nowMake(Order order);

    /**
     * 关注需求
     */
    int concernDemand(String userid, String demandid);

    /**
     * 取消关注需求
     */
    int cancelConcernDemand(String userid, String demandid);

    /**
     * 档期取消订单
     */
    int cancelOrder(Integer orderid);

    //查看订单详情
    Order selectOrderInfo(Integer orderid);

    //查看订单详情
    Order selectOrderInfoByOrderId(String orderid);

    //修改订单
    int updateOrderRetractor(Order order);

    //修改优惠券状态
    int updateDiscountStatus(Integer couponid);

    //将积分退还给用户
    int returnUserIntegral(String userid, String integral);

    //将金钱退还给用户钱包
    int returnUserMoney(String userid, String money);

    //删除服务
    int deleteServer(Integer serverid);

    /**
     * 档期确认完成
     */
    int confirmOrder(Map<String, Object> map);

    //修改该服务单号为已完成
    int updateServerStatus(Integer serverid);

    //修改服务为未完成
    int serverCancel(Integer serverid);

    //服务完成后给该用户增加积分
    int updateIntegral(String userid, String integral);

    //最后添加该用户的积分记录
    int insertIntegralRecord(String userid, String integral, String type, String recommend_id);

    /**
     * 档期删除
     */
    int deleteServerOrder(Integer serverid);

    /**
     * 需求确认完成
     */
    int demandSure(Integer demandid);

    //修改需求为未完成
    int demandCancel(Integer demandid);


    /**
     * 需求删除
     */
    int deleteDemand(Integer demandid);

    /**
     * 需求报名
     */
    int applyDemand(String demandid, String userid, String longitude, String latitude);

    /**
     * 取消需求报名
     */
    int cancelApplyDemand(String demandid, String userid);

    /**
     * 我的档期
     */
    List<Map<String, Object>> selectUserAuction(@Param("userid") String userid, @Param("type") String type, @Param("byUserid") String byUserid);

    //查看我发布的档期
    List<Map<String, Object>> selectMyServer(String userid);
    //查询我预约的服务
    List<Map<String, Object>> selectUserServer(String userid);
    //查看用户是否评论
    int selectIsComment(Map<String, Object> map);

    //查看是否评价
    int selectCommentNum(Map<String, Object> map);

    /**
     * 删除发布服务
     */
    int deletePublishServer(Integer serverid);

    /**
     * 档期评价
     */
    int auctionAppraise(Map<String, Object> map);

    //修改订单状态
    int updateOrderStatus(Integer id);

    //修改订单
    int updateOrder(String serverid, String type);
    //查询订单投诉申诉状态
    List<Map<String, Object>> selectAppeal(String orderId);

    /**
     * 档期详情
     */
    Map<String, Object> selectAuctionInfo(Integer orderid, Integer userid);

    //查看需求订单详情
    Map<String, Object> selectAuctionInfo2(Integer orderid, Integer userid);

    /**
     * 支付违约金时查看用户钱包
     */
    Map<String, Object> selectUserMoney(String userid);

    Map<String, Object> selectCancelOrder(String orderid);
    
    Map<String, Object> selectCancelOrderType(String orderid,String type);
    //修改用户钱包信息
    int UpdateUserMoney(Map<String, Object> map);

    //修改订单状态为已取消
    int updateOrderStatu(Integer id);

    /**
     * 我发布的需求
     */
    List<Map<String, Object>> selectUserIssueDemand(String userid);

    /**
     * 我报名的需求
     */
    List<Map<String, Object>> selectUserApplyDemand(String userid);

    /**
     * 我的需求详情
     */
    Map<String, Object> selectUserDemandInfo(Integer demandid, Integer userid);

    //查看需求的报名人信息
    List<Map<String, Object>> selectApplyUserInfo(Integer demandid);

    /**
     * 首页
     */
    List<Map<String, Object>> selectIndexList(String address);

    /**
     * 查看状态为待确认和待评价的订单
     */
    List<Map<String, Object>> selectOrderStatus();

    //修改订单状态为已完成
    int updateOrderStatu2(Integer id);

    /**
     * 开始服务
     */
    int updateOrderStatuIsServer(Integer id);

    /**
     * 查看平台手续费
     */
    Double selectPlatformDiscount();

    //加入服务者余额
    int updateServerUserMoney(Map<String, Object> map);

    /**
     * 查看需求列表中的过期信息
     */
    Long[] selectDemandPastinfo();

    //删除需求
    int deleteDemandinfo(Integer demandid);

    //同时删除订单表中的相关信息
    int deleteOrderDemandInfo(String demandid);

    /**
     * 查看服务列表中的过期信息
     */
    Long[] selectServerPastinfo();

    //删除服务
    int deleteServerinfo(Integer serverid);
    
    int deleteOrderServerinfo(Integer serverid);

    /**
     * 查看待确认订单
     */
    List<Map<String, Object>> selectConfirmedOrder();

    //将该订单标记已推送
    int insertPushOrder(Integer orderid, Integer type);

    //查看该订单是否已推送
    int selectIsPushServer(Integer orderid);

    /**
     * 查看初始状态的需求订单
     */
    List<Map<String, Object>> selectOriginalState();

    //查看第一个报名人的报名时间
    Date selectFristApplyTime(String demandid);

    //查看该订单是否已推送
    int selectIsPushDemand(Integer orderid);

    /**
     * 订单提交完成
     */
    int orderSubmitFinish(Integer orderid);

    /**
     * 查看两小时内未确认完成的订单
     */
    List<Map<String, Object>> selectUnfinishedOrder();

    /**
     * 查看超过两小时未开始服务的订单
     */
    List<Map<String, Object>> selectNoSercerOrder();
    //修改订单状态为待评价
    int updateOrderIsRemain(Integer orderid);

    /**
     * 查看用户生日
     */
    List<Map<String, Object>> selectUserBirthday();

    //修改用户年龄
    int updateUserAge(Integer userid, Integer age);

    /**
     * 增加用户取消订单记录
     */
    int insertCancelOrder(String userid, String money, String type, String orderid, String userMoney, String status, String platform_money, String procedure);
    /**
     * 增加用户提成记录
     */
    int insertRoyaltyOrder(String userid, String money, String type, String orderid, String userMoney, String status, String platform_money, String procedure, String lower_userid);


    void insertViolate(@Param("money") Double money, @Param("userId") String userId, @Param("orderId") String orderId, @Param("defaulterId") String defaulterId);

    void auctionAppraise_to(Map<String, Object> map);

    Map<String, Object> selectComment_(@Param("out_trade_no") String out_trade_no);

    int getAuctionAppraise(Map<String, Object> map);

    int getApplyNum(@Param("id") Long id);
    
    Double selectVipDiscont();

    String selectisVip1(String user_id);
    
    String selectisVip2(String user_id);
    
    String selectVipUserDiscont();
    
    Double selectEntUserDiscont();
    
    String selectEntMember(String user_id);
    
    String selectServerOrderId(String server_id,String type);
    List<Map<String, Object>> selectServerOrder(String server_id,String type);
    int deleteOrder(String id);
    
    Map<String, Object> selectRate();
    
    String selectEntUserId(String user_id);
    
    int deletedDemandApply(String demand_id,String user_id);
    int deletedDemandApplyUser(String demand_id,String user_id);
    Map<String, Object> selectOrderUser( String order_id);
    List<Map<String, Object>> selectPublishDemand();
    int deletePublishDemand(String demand_id);
    List< Map<String, Object>> selectPublishServer();
    int deletePublishServerOrder(String sever_id);
    List<Map<String, Object>> selectUserOrder( String user_id);
    
    List< Map<String, Object>> selectUserOrderEnd();
    
    String selectOrderSend( String order_id);
}
